package utils

import (
	"strings"
	"unicode"

	"golang.org/x/text/cases"
	"golang.org/x/text/language"
)

// 检查是否为大驼峰格式
func IsPascalCase(s string) bool {
	return unicode.IsUpper(rune(s[0])) && strings.IndexFunc(s[1:], unicode.IsUpper) == -1
}

// 转换为大驼峰格式
func ToPascalCase(s string) string {
	words := strings.Fields(s)
	for i, word := range words {
		if len(word) > 0 {
			words[i] = strings.ToUpper(string(word[0])) + strings.ToLower(word[1:])
		}
	}
	return strings.Join(words, "")
}

//下划线转换为小驼峰模式
func ToCamelCase(s string) string {
	parts := strings.Split(s, "_")
	for i := range parts {
		if i > 0 {
			// 使用 cases.Upper来处理首字母大写
			parts[i] = cases.Title(language.English, cases.NoLower).String(parts[i])
		}
	}
	return strings.Join(parts, "")
}

//下划线转换为小驼峰模式
func LineToPascalCase(s string) string {
	parts := strings.Split(s, "_")
	for i := range parts {
		// 对每个部分都使用大写
		parts[i] = cases.Title(language.English, cases.NoLower).String(parts[i])
	}
	return strings.Join(parts, "")
}
